Rust 入門ログ
チュートリアル進捗
TRPL (2nd edition, ja, Rust 2018 Edition 非対応) 1
3~11
13
13.2
コード書いてるときに .iter 使ってコード書いて、mut しなきゃいけないのはたぶん内部でどこまで進んだかのカーソル持ってるんだろうなーと思ってたけどそうだった
forループを使用した時には、 v1_iterを可変にする必要はありませんでした。というのも、ループがv1_iterの所有権を奪い、 陰で可変にしていたからです。
なるほど
14
14.1
やっと Box の解説に辿りついたわね
スタック上のサイズを予測可能である必要があるっぽい
スタックではなくヒープに確保しそのポインタを保持することで、スタック上のサイズを予測可能にする ために使うらしい
trait を実装した構造体がどんなデータ持つかはわからんから Box<dyn Error> になるわけだ
dyn がなにものかはわかんねぇけど
16.1
serde さわるのに derive って何?ってなったので
19.1
Box
感想
関数型プログラミング言語のエッセンスだと思うんだけど、不変であることの不便さを再度同名の変数に束縛できることで回避するのはおもしろい
相対パスじゃなくてモジュール階層の相対パスとして super が用意されてるのがかしこい
ファイル指定は不毛だし
enum のフィールドを pub できるようになってる
Result::Ok とか Result::Err とかがなにも指定せずとも使えてなんでだろうって prelude 確認して気付いた
rust-analyzer (GitHub) が予想より遥かによかった メソッドチェーン中の型が表示される
rls と違って型がわからなかったら unknown と出してくれる
学習するときは手を動かさないとダメなんだなあと改めて感じた
楽しさもあるし、落とし穴に落ちることができるので良い
ただサンプルを触っててもあんまり面白くないことが多いので、やりたい題材があるとよい
作ってる簡単な OSS プロジェクトの 1つを Rust に置き換えてみている
(こまった, しらべた) こと
いろんなとこの Result を ? したいけど適当にやりたいとき
Result<T, std::Boxed::Box<dyn std::error::Error>>
dyn で trait を扱えるようにする?
Box で trait の実装が様々であることから値のサイズがわからない のを明示する?
ポインタを持つらしい
Option 使ってるとき
nullable pointer らしい
明瞭なエラー理由がない (nullable で null なとき? なのは当然なので) ために NoneError になってるんじゃね?と言われたらまあわかる
よく知らん
関数内に return がなく返値が指定したものと異なるときのエラーがわかりにくかった
rls だからか知らないが返値を指定する箇所に波線出ていてすこしだけ困惑した
メッセージとしては期待とちゃうやん!なんだけど
関数全体に波線が出てほしかった…
これわがままというか流儀に慣れてないだけって感じはする
ネストしている型引数が不足しているときもわかりにくい…
A<T<U>> みたいなやつで A<T> って書いたときのエラー
波線は丁寧に T の下に出てるので、波線を信用して読むべき
文なのか式なのか意識してなかった
return かかんでいいとこで書いてた
Enum のシグネチャ (T) をジェネリクス <T> の指定を一瞬混同した
まず Enum に型名をつっこむのだと思っていたという重大なミスがあったんだけど
Enum の中だと違ったりするのかな?という誤った推論をした
なにがグローバルに使える (use されている) のか
enum には名前空間があるにも関わらず、Result<T, E> や Some<T> の列挙子である Ok や None が名前空間なしで使えるも prelude のおかげらしい
ライブラリドキュメント見てたら 'static とか突然出てきてわかんなくなってた
TRPL の 10.3 読んでなかっただけだった
' から始まるのは借用のジェネリクスライフタイム
-> と => を混同した
-> は関数
=> はパターンマッチ
derive ってどこから実装生えてくるの
derive 用の procedual macro を生やすやり方があるらしい
TODO
疑問は解消したら上に移す
mod
Rust Book つまみ読みしただけだとライブラリでどうやるのかしかわからん
アプリケーション内で mod して動いてるけどこれでいいのか?
そもそも mod って本当はどういう役割?
見た感じ mod <name> で name.rs or name/lib.rs 読むっぽい
エントリーポイントとなってるファイル(use されるなら lib.rs, そうじゃないなら main.rs)外のファイルは mod 経由で指定しないといけない、というだけの認識だけでいいのかしら
enum のシグネチャ
匿名 struct はそのまま使えるが、定義済み struct は tuple に入れないと使えない?それはなぜ?
そもそも Field(TypeA, TypeB) の () って tuple なん?
dyn って何
雰囲気で Box と組み合わせて使ってるけど、なんとなくでしかない
フォーマッタっていろいろあるのかな?
型強制って具体的になにするの?
Box でエラートレイトを包んでそれで tryable になるのって、なんで?
tryable って単語があるかは知らない、末尾 ? のこと
to_, into_, as_ の使いわけがわからん
記憶ゲーするのは嫌なので、法則を知りたい
RFC430 に書いてあるらしい
命名規則の RFC
extern crate って何????????
Rust で SQL 触るようなサーバー組むやつ
データベースコネクションプールの並列性まわりでウワーってなりそう
ライブラリがいい感じにしてくれそうだけど!
serde_json って実は feature で生えてたりする?